home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / CIncludesTool 1.0 / modified version / source files / dependencies.c < prev    next >
Encoding:
Text File  |  1991-08-28  |  3.2 KB  |  161 lines  |  [TEXT/MPS ]

  1. // dependencies.c
  2. //
  3. // dependency functions for CIncludesCode MPW tool
  4.  
  5. #include "CIncludesCode.h"
  6. #include <Memory.h>
  7. #include <StdIO.h>
  8.  
  9. extern long numFiles;
  10. extern ptrArray *argvPtr;
  11. extern strArray **filesHdl;
  12. extern Handle dependencies;
  13.  
  14. Handle tempDependencies;
  15.  
  16. Boolean isDependent(char *depPtr,short oldFile,short newFile)
  17. // true if oldFile dependent on newFile
  18.  
  19. {
  20. return ((Boolean) (*(depPtr + (oldFile * numFiles) + newFile)));
  21. }  // isDependent()
  22.  
  23. void setDependency(Handle depHdl,short oldFile,short newFile,Boolean value)
  24. {
  25. *(*depHdl + (oldFile * numFiles) + newFile) = (char) value;
  26. }  // setDependency()
  27.  
  28. long nextInclude(Handle dataHdl,long pos,long limit)
  29. // returns offset of next #include filename
  30.  
  31. {
  32. char *p = StripAddress(*dataHdl + pos);
  33. char *q = StripAddress(*dataHdl + limit);
  34. char ch;
  35.  
  36. while (p < q)
  37.     {
  38.     ch = *p++;
  39.     if (ch == '#')
  40.         {
  41.         if (isString(p,"include"))
  42.             {
  43.             return ((long) (p - StripAddress(*dataHdl)));
  44.             }  // if isString()
  45.         else
  46.             {
  47.             while ((*p++ != '\n') && (p < q))
  48.                 ;
  49.             }  // else if isString()
  50.         }  // if ch
  51.     else
  52.         {
  53.         if (ch > ' ')
  54.             {
  55.             while ((*p++ != '\n') && (p < q))
  56.                 ;
  57.             }  // if ch
  58.         }  // else if ch
  59.     }  // while p
  60. return limit;
  61. }  // nextInclude()
  62.  
  63. void extractFileName(char *dest,char *src)
  64. {
  65. while ((*src != '<') && (*src != '"'))
  66.     {
  67.     ++src;
  68.     }  // while *src
  69. ++src;
  70.     
  71. while ((*src != '>') && (*src != '"'))
  72.     {
  73.     *dest++ = *src++;
  74.     }  // while *src
  75. *dest = '\0';
  76. }  // extractFileName
  77.  
  78. void extractIncludes(Handle dataHdl,short curFile)
  79. {
  80. long pos = 0;
  81. short index = 0;
  82. short fileIndex;
  83. long limit = GetHandleSize(dataHdl) - 1;
  84. char s[64];
  85.     
  86. while ((pos = nextInclude(dataHdl,pos,limit)) < limit)
  87.     {
  88.     extractFileName(s,(*dataHdl + pos));
  89.     if ((fileIndex = getFileIndex(s)) != -1)
  90.         {
  91.         setDependency(tempDependencies,curFile,fileIndex,true);
  92.         }  // if fileIndex
  93.     }  // while pos
  94. }  // extractIncludes
  95.  
  96. void expandDependencies(short curExpanded,short curFile)
  97. {
  98. short i;
  99.     
  100. setDependency(dependencies,curExpanded,curFile,true);
  101. for (i = 0; i < numFiles; ++i)
  102.     {
  103.     if (isDependent(*tempDependencies,curFile,i) && !isDependent(*dependencies,curExpanded,i))
  104.         {
  105.         expandDependencies(curExpanded,i);    // recursion
  106.         }  // if isDependent
  107.     }  // for i
  108. }  // setDependency
  109.  
  110. void makeDependencyArray(void)
  111. {
  112. short i;
  113. Handle dataHdl;
  114.     
  115. fprintf(stderr,"Collecting \"#Includes\" data...\n");
  116.  
  117. tempDependencies = NewHandleClear(numFiles * numFiles);
  118. checkMemory();
  119.  
  120. for (i = 0; i < numFiles; ++i)
  121.     {
  122.     dataHdl = loadDataFile((*argvPtr)[i+2]);
  123.     extractIncludes(dataHdl,i);
  124.     DisposHandle(dataHdl);
  125.     }  // for i
  126.  
  127. fprintf(stderr,"Calculating dependency array...\n");
  128.  
  129. dependencies = NewHandleClear(numFiles * numFiles);
  130. checkMemory();
  131.  
  132. for (i = 0; i < numFiles; ++i)
  133.     {
  134.     expandDependencies(i,i);
  135.     }  // for i
  136.  
  137. DisposHandle(tempDependencies);
  138. }  // makeDependencyArray()
  139.  
  140. void printDependencyArray(void)
  141. // 12-page printout of filesnames and dependencies
  142.  
  143. {
  144. short i,j;
  145.     
  146. fprintf(stderr,"\n");
  147.  
  148. for (i = 0; i < numFiles; ++i)
  149.     {
  150.     fprintf(stderr,"\nfile: %s\n",(**filesHdl)[i]);
  151.     for (j = 0; j < numFiles; ++j)
  152.         {
  153.         if (isDependent(*dependencies,i,j))
  154.             {
  155.             fprintf(stderr,"%s\n",(**filesHdl)[j]);
  156.             }  // if isDependent
  157.         }  // for j
  158.     }  // for i
  159. }  // printDependencyArray()
  160.  
  161. // end of dependencies.c